package pmtarefa2.regras;

import pmtarefa2.dominio.Solicitante;

public class RegraLimiteEmprestimo {

    public static final int IDADE_MINIMA_HOMEM = 18;
    public static final int LIMITE_IDADE_FAIXA_HOMEM_1 = 35;
    public static final int LIMITE_IDADE_FAIXA_HOMEM_2 = 45;
    public static final int LIMITE_IDADE_FAIXA_HOMEM_3 = 56;
    public static final float SALARIO_DIVISAO_FAIXA_HOMEM_1 = 5000.0f;
    public static final float SALARIO_DIVISAO_FAIXA_HOMEM_2 = 6000.0f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_1_A = 0.7f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_1_B = 0.75f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_2_A = 0.55f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_2_B = 0.6f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_3 = 0.3f;
    public static final int IDADE_MINIMA_MULHER = 18;
    public static final int LIMITE_IDADE_FAIXA_MULHER_1 = 30;
    public static final int LIMITE_IDADE_FAIXA_MULHER_2 = 40;
    public static final int LIMITE_IDADE_FAIXA_MULHER_3 = 51;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_MULHER_1 = 0.7f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_MULHER_2 = 0.5f;
    public static final float LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_MULHER_3 = 0.35f;

    public float avaliar(Solicitante solicitante) throws RegraException {
        float emprestimoMaximo = 0;

        float salario = solicitante.getSalario();
        int sexo = solicitante.getSexo();
        int idade = solicitante.getIdade();

        if (sexo == Solicitante.SEXO_MASCULINO && (idade < IDADE_MINIMA_HOMEM || idade > LIMITE_IDADE_FAIXA_HOMEM_3)) {
            throw new RegraException("Emprestimos são concedidos apenas para homens entre " + IDADE_MINIMA_HOMEM + " e " + LIMITE_IDADE_FAIXA_HOMEM_3 + " anos de idade.");
        } else if (sexo == Solicitante.SEXO_FEMININO && (idade < IDADE_MINIMA_MULHER || idade > LIMITE_IDADE_FAIXA_MULHER_3)) {
            throw new RegraException("Emprestimos são concedidos apenas para mulheres entre " + IDADE_MINIMA_MULHER + " e " + LIMITE_IDADE_FAIXA_MULHER_3 + " anos de idade.");
        }

        if (sexo == Solicitante.SEXO_MASCULINO && idade <= LIMITE_IDADE_FAIXA_HOMEM_1 && salario <= SALARIO_DIVISAO_FAIXA_HOMEM_1) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_1_A;
        } else if (sexo == Solicitante.SEXO_MASCULINO && idade <= LIMITE_IDADE_FAIXA_HOMEM_1 && salario > SALARIO_DIVISAO_FAIXA_HOMEM_1) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_1_B;
        } else if (sexo == Solicitante.SEXO_MASCULINO && idade <= LIMITE_IDADE_FAIXA_HOMEM_2 && salario <= SALARIO_DIVISAO_FAIXA_HOMEM_2) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_2_A;
        } else if (sexo == Solicitante.SEXO_MASCULINO && idade <= LIMITE_IDADE_FAIXA_HOMEM_2 && salario > SALARIO_DIVISAO_FAIXA_HOMEM_2) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_2_B;
        } else if (sexo == Solicitante.SEXO_MASCULINO && idade <= LIMITE_IDADE_FAIXA_HOMEM_3) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_HOMEM_3;
        } else if (sexo == Solicitante.SEXO_FEMININO && idade <= LIMITE_IDADE_FAIXA_MULHER_1) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_MULHER_1;
        } else if (sexo == Solicitante.SEXO_FEMININO && idade <= LIMITE_IDADE_FAIXA_MULHER_2) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_MULHER_2;
        } else if (sexo == Solicitante.SEXO_FEMININO && idade <= LIMITE_IDADE_FAIXA_MULHER_3) {
            return salario * LIMITE_PERCETUAL_EMPRESTIMO_FAIXA_MULHER_3;
        }

        return emprestimoMaximo;
    }
}
